// 全局拦截器，全局方法等逻辑
import axios from 'axios';
import { ElMessage } from 'element-plus';
import requestCancel from './requestCancel.js'

// request请求拦截处理
axios.interceptors.request.use(
  config => {
    // 将当前请求添加到pending中
    requestCancel.addPending(config)

    if (config.method === 'get') {
      config.params = Object.assign({ t: Date.now() }, config.params);
    }
    config.headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'redirectUrl': location.href
    };
    return config;
  },
  error => Promise.reject(error)
);

// response响应拦截处理
axios.interceptors.response.use(
  res => {
    // 在请求结束后，移除本次请求
    requestCancel.removePending(res.config)

    // 请求成功，但是操作不成功时显示后端返回的错误信息
    if (res.data.code != '200') {
      ElMessage.error(res.data.message || '网络拥堵，稍后再试');
      return Promise.reject(res.data);
    }
    return res.data;
  },
  err => {
    requestCancel.removePending(err.config || {})
    if (axios.isCancel(err)) {
      console.log('请求被取消:', err.message)
      return Promise.reject(err);
    }

    ElMessage.error('网络拥堵，稍后再试');
    return Promise.reject(err);
  }
);

export default axios;
